home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / SNIP9_91.ARJ / CRC-16.C < prev    next >
Text File  |  1991-08-13  |  1KB  |  38 lines

  1. #define POLY 0x8408
  2. /*
  3. //                                      16   12   5
  4. // this is the CCITT CRC 16 polynomial X  + X  + X  + 1.
  5. // This works out to be 0x1021, but the way the algorythm works
  6. // lets us use 0x8408 (the reverse of the bit pattern).  The high
  7. // bit is always assumed to be set, thus we only use 16 bits to
  8. // represent the 17 bit value.
  9. */
  10.  
  11. unsigned short crc16(char *data_p, unsigned short length)
  12. {
  13.       unsigned char i;
  14.       unsigned int data;
  15.       unsigned int crc = 0xffff;
  16.  
  17.       if (length == 0)
  18.             return (~crc);
  19.  
  20.       do
  21.       {
  22.             for (i=0, data=(unsigned int)0xff & *data_p++;
  23.                  i < 8; 
  24.                  i++, data >>= 1)
  25.             {
  26.                   if ((crc & 0x0001) ^ (data & 0x0001))
  27.                         crc = (crc >> 1) ^ POLY;
  28.                   else  crc >>= 1;
  29.             }
  30.       } while (--length);
  31.  
  32.       crc = ~crc;
  33.       data = crc;
  34.       crc = (crc << 8) | (data >> 8 & 0xff);
  35.  
  36.       return (crc);
  37. }
  38.